<?php

/**
 * Description of FormHelper
 * 
 * Contém funcções uteis para as diversas operações.
 *
 * @author lmcosta
 */
class FormHelper {
    
    /**
     * Validar o username
     * @param string $username
     * @param int $tamanhoMin - Número de caracteres mínimo
     * @param int $tamanhoMax - Número de caracteres máximo
     * @return boolean 
     */
    public static function validateUsername($username, $tamanhoMin = 4, $tamanhoMax = 15) {
        return self::validatePassword($username, $tamanhoMin, $tamanhoMax);
    }
    
    /**
     * Validar a password
     * @param string $password
     * @param int $tamanhoMin - Número de caracteres mínimo
     * @param int $tamanhoMax - Número de caracteres máximo
     * @return boolean 
     */
    public static function  validatePassword($password, $tamanhoMin = 4, $tamanhoMax = 15) {
        //Verificar se está dentro dos limites
        if(!self::validateTamanho($password, $tamanhoMin, $tamanhoMax)) {
            return false;
        }
        
        //Aceitar apenas letras, números e underscore '_'
        //Se a string resultado estiver vazia, quer dizer que só continha caracteres permitidos, logo, é válida
        $password = preg_replace('/[a-zA-Z0-9_]/', '', $password);
        if (empty($password)) {
            return true;
        } else {
            return false;
        }
    }
    
    /**
     * Validar o tamanho de uma string
     * @param string $text
     * @param int $tamanhoMin - Número de caracteres mínimo
     * @param int $tamanhoMax - Número de caracteres máximo
     * @return boolean 
     */
    public static function validateTamanho($text, $tamanhoMin = 4, $tamanhoMax = 15) {
        return (strlen($text) >= $tamanhoMin && strlen($text) <= $tamanhoMax) ? true : false;
    }
    
    /**
     * Validar se uma string contem no máximo $tamanhoMax caracteres
     * @param type $text
     * @param type $tamanhoMax - Número de caracteres máximo
     * @return boolean
     */
    public static function validateMaxTamanho($text, $tamanhoMax = 15) {
        return (strlen($text) <= $tamanhoMax) ? true : false;
    }
    
    /**
     * validar se um valor é numerico
     * @param type $valor
     * @return boolean 
     */
    public static function numerico($valor) {
        return is_numeric($valor);
    }
    
    /**
     * Encriptar uma password, com base na key
     * @param string $password
     * @return string 
     */
    public static function encriptarPassword($password) {
        $site = Site::getInstance();
        return sha1($password . $site->pass_key);
    }
    
    /**
     * Gerar um ID de sessão, com base na key, endereço remoto, nome do servidor, browser cliente
     * @return string 
     */
    public static function gerarIDSessao() {
        $site = Site::getInstance();
        return sha1($site->id_key.getenv('REMOTE_ADDR').$_SERVER['SERVER_NAME'].$_SERVER['HTTP_USER_AGENT']);
    }
    
    /**
     * Colocar caracteres especiais nas sua entidades
     * @param string $string
     * @return string 
     */
    public static function encodeString($string) {
        return htmlentities($string);
    }
    
    /**
     * Obter valor do POST e retirar caracteres html
     * @param type $input
     * @return string 
     */
    public static function encodeInput($input) {
        if (empty($_POST[$input])) {
            return "";
        }
        return htmlentities($_POST[$input]);
    }
    
    /**
     * Fazer escape aos caracteres especiais, para evitar problemas de segurança na base de dados
     * @param type $str
     * @return string 
     */
    public static function tranformarToQuery($str) {
        if (function_exists("mysql_real_escape_string")) {
            $string = mysql_real_escape_string($str);
        } else {
            $string = addslashes($str);
        }
        return $string;
    }
    
}

?>
